<?php

    class CustomerController extends WebController
    {

        /**
        * @return array action filters
        */
        public function filters()
        {
            return array(
                'accessControl', // perform access control for CRUD operations
                'postOnly + delete', // we only allow deletion via POST request
            );
        }

        /**
        * Specifies the access control rules.
        * This method is used by the 'accessControl' filter.
        * @return array access control rules
        */
        public function accessRules()
        {
            return array(
                array('allow',  // allow all users to perform 'index' and 'view' actions
                    'actions'=>array('index','login','forgot','captcha', 'verifyPhoneForgot', 'password'),
                    'users'=>array('*'),
                ),
                array('allow', // allow authenticated user to perform 'create' and 'update' actions
                    'actions'=>array('logout','update', 'bills'),
                    'users'=>array('@'),
                ),
                array('deny',  // deny all users
                    'users'=>array('*'),
                ),
            );
        }

        public function init(){
            parent::init();
        }


        public function actionBills()
        {
            $model = new Bill('search');
            $model->unsetAttributes();  // clear any default values
            if(isset($_GET['Bill'])){
                $model->attributes=$_GET['Bill'];
            }


            $criteria=new CDbCriteria;
            $criteria->with = array('customer' => array(
                'alias' => 'c',
                'select' => 'phone, name, address',
                'together' => true,
            ));
            $criteria->addCondition("customer_id = {$this->customer->id}");

            $sort = Yii::app()->request->getQuery('Bill_sort');

            if(!$sort && $sort != 'created') $criteria->order = 't.created DESC'; 
            $criteria->compare('t.code',$model->code, true);
            $criteria->compare('t.branch_id',$model->branch_id);
            $criteria->compare('t.created',$model->created,true);
            $criteria->compare('t.status_pay',$model->status_pay);
            $criteria->compare('t.status_do',$model->status_do);
            $criteria->compare('t.status_return',$model->status_return);
            $criteria->compare('t.status',$model->status);

            $dataProvider = new CActiveDataProvider($model, array(
                'criteria'=>$criteria,
                'pagination'=>array(
                    'pageSize'=>20,
                ),
            ));
            
            $this->pageTitle = 'Danh sách đơn hàng';
            $this->render('bills',array(
                'model'         =>  $model,
                'dataProvider'         =>  $dataProvider,
            ));

        }

        public function actionLogout(){    

            Yii::app()->user->logout(false);

            Yii::app()->user->setFlash('success', "Thoát thành công");
            $url = Yii::app()->request->urlReferrer;
            if(!$url) $url= $this->createUrl('/web/customer/login');

            $this->redirect($url);
        }

        /**
        * http://cta.dev/user/page/login
        * 
        * @param mixed $service
        */
        public function actionLogin(){

            if($this->customer) $this->redirect(array('/web/customer/update')); 

            Yii::import('ext.PasswordHash');
            Yii::import('web.models.customer.LoginForm');

            $model = new LoginForm;

            if(isset($_POST['ajax']) && ($_POST['ajax']==='login-form')){
                echo CActiveForm::validate($model);
                Yii::app()->end();
            }

            if(isset($_POST['LoginForm'])){     

                $post = $_POST['LoginForm'];

                $model->attributes = $post;
                if($model->validate() && $model->login()){
                    $this->redirect(Yii::app()->user->returnUrl);
                }
            }
            $this->pageTitle = 'Đăng nhập';
            $this->render('login', compact('model'));     

        }  


        public function actionUpdate()
        {
            $model = $this->customer;
            $model->scenario = 'update';

            if(isset($_POST['ajax']) && $_POST['ajax']==='update-form'){
                echo CActiveForm::validate($model);
                Yii::app()->end();
            }

            if(isset($_POST['Customer'])){
                $post = $_POST['Customer'];

                $model->attributes = $post;
                if($model->validate())
                {
                    //                    echo '<pre>';print_r($_POST);echo '</pre>';
                    //                    echo '<pre>';print_r($_FILES);echo '</pre>';
                    //                    echo '<pre>';print_r($model->attributes);echo '</pre>';
                    //                    die;

                    // update user   
                    $model->dob = $model->dob ? date('Y-m-d', strtotime($model->dob)) : NULL;
                    $model->update();

                    Yii::app()->user->setFlash('success', 'Tài khoản được cập nhật thành công!');

                    $this->refresh();
                }
            }

            $model->dob = $model->dob ? date('d-m-Y', strtotime($model->dob)) : NULL;

            $this->pageTitle = 'Cập nhật tài khoản';
            $this->render('update', array(
                'model' => $model,
            ));  
        }


        public function actionForgot($token = NULL)
        {
            if($this->customer) $this->redirect(array('/web/customer/update'));


            Yii::import('web.models.customer.ForgotForm');

            $model = new ForgotForm();

            // if it is ajax validation request
            //        if(isset($_POST['ajax']) && $_POST['ajax']==='forgot-form')
            //        {
            //            echo CActiveForm::validate($model);
            //            Yii::app()->end();
            //        }

            if(isset($_POST['ForgotForm']))
            {
                $post = $_POST['ForgotForm'];
                $model->attributes = $post;

                if($model->validate())
                {
                    // if username is phone number
                    $phone = $post['username'];
                    $cpc = CustomerPhoneCode::model()->findByAttributes(array('phone' => $phone));

                    // TODO: test check reset password 
                    $dateTimeNow = MyDateTime::getCurrentTime('now', false); 
                    if($cpc){
                        $dateTimeCreated = MyDateTime::getCurrentTime($cpc->created, false);
                        $time = $dateTimeNow->getTimestamp() - $dateTimeCreated->getTimestamp();
                        if($time < 3600*24){
                            Yii::app()->user->setFlash('error', "Số điện thoại: {$phone} đã gửi yêu cầu reset mật khẩu lúc {$dateTimeCreated->format("H:i")}. Bạn chỉ có thể reset tiếp vào {$dateTimeCreated->format("H:i")} ngày hôm sau.");
                            $this->refresh();   
                        }

                        $cpc->delete();     
                    }

                    $dateTimeReset = MyDateTime::getCurrentTime($model->customer->reset_time, false);
                    $time = $dateTimeNow->getTimestamp() - $dateTimeReset->getTimestamp();
                    if($time < 3600*24){
                        Yii::app()->user->setFlash('error', "Số điện thoại: {$phone} đã gửi yêu cầu reset mật khẩu lúc {$dateTimeReset->format("H:i")}. Bạn chỉ có thể reset tiếp vào {$dateTimeReset->format("H:i")} ngày hôm sau.");
                        $this->refresh();   
                    }

                    // save code for phone
                    $cpc = new CustomerPhoneCode;
                    $cpc->setIsNewRecord(true);
                    $cpc->code = $cpc->newCode;
                    $cpc->phone = $phone;
                    $cpc->customer_id = $model->customer->id;
                    $cpc->created = MyDateTime::getCurrentTime();
                    $cpc->insert();

                    // send sms
                    $msg = "GiatLaVui.com: Ban vua gui yeu cau reset mat khau. Ma xac nhan doi mat khau la: {$cpc->code}. (Ma xac nhan co thoi han 24h)";
                    Yii::app()->sms->send($cpc->phone, $msg);

                    Yii::app()->user->setFlash('success', "Chúng tôi vừa gửi mã xác nhận việc yêu cầu reset mật khẩu tới số điện thoại: {$cpc->phone}. Hãy điền mã xác nhận vào ô bên dưới để tiếp tục.");
                    $this->redirect(array('/web/customer/verifyPhoneForgot'));

                }

            }


            $this->pageTitle = 'Quên mật khẩu';

            $this->render('forgot', array('model' => $model));
        }

        public function actionVerifyPhoneForgot(){
            Yii::import('web.models.customer.VerifyPhoneForm');
            $model = new VerifyPhoneForm('forgot');

            if(isset($_POST['ajax']) && $_POST['ajax']=='verify-phone-form'){
                echo CActiveForm::validate($model);
                Yii::app()->end();
            }

            if(isset($_POST['VerifyPhoneForm'])) {
                $post = Yii::app()->request->getPost('VerifyPhoneForm');
                $model->attributes = $post;

                if($model->validate()) {
                    $cpc = $model->cpc;
                    $customer = $model->customer;

                    // update latest reset_time, set password to NULL
                    $customer->password = NULL;
                    $customer->reset_time = MyDateTime::getCurrentTime();
                    $customer->setIsNewRecord(FALSE);
                    $customer->update();

                    // login
                    $userIdentity = new CUserIdentity($customer->id, '');
                    $userIdentity->setState('id', $customer->id);
                    $userIdentity->setState('name', $customer->name);
                    Yii::app()->user->login($userIdentity, Yii::app()->params->customer['remember']);

                    //remove user phone code 
                    $cpc->delete();

                    Yii::app()->user->setFlash('success', "Tạo mật khẩu mới cho tài khoản của bạn.");
                    $this->redirect(array('/web/customer/password'));      
                }
            }
            $this->pageTitle = 'Quên mật khẩu - Xác nhận số điện thoại';
            
            $this->render('verify_phone', array(
                'model' => $model
            ));  
        }

        public function actionPassword(){
            if(!$this->customer) $this->redirect(array('/web/customer/login'));

            Yii::import('web.models.customer.PasswordForm');
            Yii::import('ext.PasswordHash');

            //            echo '<pre>';print_r($this->user->getHashPassword('123456'));echo '</pre>';;
            //            echo '<pre>';print_r($this->user->getHashPassword('123456'));echo '</pre>';;

            //            die;

            $model = new PasswordForm;
            $model->scenario = $this->customer->password ? 'changePassword' : 'updatePassword';
            $passwordActionName =  $this->customer->password ? 'Đổi mật khẩu' : 'Tạo mật khẩu';

            if(isset($_POST['ajax']) && $_POST['ajax']==='password-form'){
                echo CActiveForm::validate($model);
                Yii::app()->end();
            }

            if(isset($_POST['PasswordForm'])){
                $post = $_POST['PasswordForm'];

                $model->attributes = $post;
                if($model->validate())
                {
                    $customer = $this->customer;
                    $customer->password = $customer->getHashPassword($model->newPassword);
                    $customer->update();
                    Yii::app()->user->setFlash('success', "{$passwordActionName} thành công");
                    $this->refresh();
                }
            }

            $this->render('password', compact('model', 'passwordActionName'));      
        }


    }
